# 抖码算法，让算法学习变得简单有趣
# 作者：老汤

"""
描述
    原理：ip地址的每段可以看成是一个0-255的整数，把每段拆分成一个二进制形式组合起来，然后把这个二进制数转变成
    一个长整数。
    举例：一个ip地址为10.0.3.193
    每段数字             相对应的二进制数
    10                   00001010
    0                    00000000
    3                    00000011
    193                  11000001

    组合起来即为：00001010 00000000 00000011 11000001,转换为10进制数就是：167773121，即该IP地址转换后的数字就是它了。

    数据范围：保证输入的是合法的 IP 序列

    输入描述：
    输入
    1 输入IP地址
    2 输入10进制型的IP地址

    输出描述：
    输出
    1 输出转换成10进制的IP地址
    2 输出转换后的IP地址

    示例1
    输入：
    10.0.3.193
    167969729
    复制
    输出：
    167773121
    10.3.3.193
"""

"""
ip 转成数字的思路
    我们知道：
        2 进制的话，只有 0 和 1 两个数组
        8 进制的话，最小值是 9，最大值是 7，总共有 8 个数字
        10 进制的话，最小值是 0，最大值是 9，总共有 10 个数字

        因为 ip 中的每个数字的大小最小是 0，最大是 255，总共是 256 个，相当于是 256 进制

        那么 ip 10.0.3.193 中的 4 个数都是 256 进制的， 要把这个 ip 转成整数，
        相当于就是将四个 256 进制的数字，转成 10 进制，然后累加

        我们知道 2 进制转成 10 进制的方法，比如将二进制 1101 转成十进制是这样的：
        1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0

        那么将 10.0.3.193 中的 4 个 256 进制转成 10 进制，是这样的：
        10 * 256^3 + 0 * 256^2 + 3 * 256^1 + 193 * 256^0
"""
def ip_2_num(ip):
    nums = ip.split(".")
    res = 0
    for i in range(4):
        res = res * 256 + int(nums[i])
    return str(res)


"""
数字转成 ip 思路
将整数转成 ip 就相当于：将一个 256 进制的整数，转成 4 个 10 进制的整数

    我们知道，将一个 10 进制的整数 (比如 13) 转成一个二进制的逻辑是：
    13 ➗ 2 = 6....1  ---> 得到一个 1
    6 ➗ 2 = 3....0  ----> 得到一个 0
    3 ➗ 2 = 1....1  ----> 得到一个 1
    1 ➗ 2 = 0....1  ----> 得到一个 1
    所以二进制是：1101

    同样，一个 10 进制的 167773121，转成 4 个 256 进制整数的逻辑就是：
    167773121 ➗ 256 = 655363 .... 193
    655363 ➗ 256 = 2560 .... 3
    2560 ➗ 256 = 10 .... 0
    10 ➗ 256 = 0 .... 10
    所以，ip 是：10.0.3.193
"""
def num_2ip(num):
    ip = int(num)
    res = ""
    for i in range(4):
        res = str(ip % 256) + "." + res
        ip //= 256
    return res[0:len(res) - 1]


while True:
    try:
        line = input()
        if "." in line:
            print(ip_2_num(line))
        else:
            print(num_2ip(line))
    except:
        break
